package com.niuke;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * 11. 会议接待
 * https://zhuanlan.zhihu.com/p/636859711 (没搜到题，这个是代表团坐车)
 */
public class NiukeMoni13TianCai {

    public static int number;
    public static int[] data;
    public static int[] tempIndex; // 记录下标
    public static int[] tempData; // 记录下标对应的数据

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        String[] input = scanner.nextLine().split(",");
        number = Integer.parseInt(scanner.nextLine());

        tempIndex = new int[input.length];
        tempData = new int[input.length];
        data = new int[input.length];
        for (int i = 0; i < input.length; i++) {
            data[i] = Integer.parseInt(input[i]);
            tempIndex[i] = -1; // 3. 必须全部将下标置为 -1
        }

        List<List<Integer>> ans = new ArrayList<>();
        dfs(0, 0, ans);

        System.out.println(ans.size());
        for (int i = 0; i < ans.size(); i++) {
            System.out.println(Arrays.toString(ans.get(i).toArray()));
        }
    }

    /**
     * 注意里面的三个关键点
     */
    public static void dfs(int p, int count, List<List<Integer>> ans) {
        int total = 0;
        List<Integer> temp = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            temp.add(tempData[i]); // 1. 这里数据是 tempData[i]
            total += temp.get(i);
            if (total == number) {
                ans.add(temp);
                return;
            }
            if (total > number) {
                return; // 2. 超了应该return，不能让 count 继续增加，否则会有很多重复的正确答案
            }
        }

        // 自己摸索，做了改进
        // 原先用flag，会有以 0 1 开头执行完后，里面包含 0 1 2 的情况，
        // 开始执行 0 2 开头的情况时，会执行 0 2 1 这种反序的情况，但其实效果和 0 1 2 重复
        // 这里直接使 i 从末尾的 tempIndex[p - 1] + 1 开始循环，可以完美避免反序
        int i = 0;
        if (p - 1 >= 0 && tempIndex[p - 1] != -1) {
            i = tempIndex[p - 1] + 1;
        }
        for (; i < data.length; i++) {
            tempData[p] = data[i];
            tempIndex[p] = i;
            dfs(p + 1, count + 1, ans);
        }
    }

}
